package com.example.nacosdemo.service;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 配置服务类，用于演示 Nacos 配置的动态刷新和多属性管理
 * 使用 @RefreshScope 注解实现配置的动态刷新
 */
@Service
@RefreshScope
public class ConfigService {

    // 从 Nacos 配置中获取字符串属性
    @Value("${demo.config.message:默认消息}")
    private String message;

    // 从 Nacos 配置中获取数字属性
    @Value("${demo.config.timeout:30}")
    private int timeout;

    // 从 Nacos 配置中获取布尔属性
    @Value("${demo.config.enabled:true}")
    private boolean enabled;

    // 从 Nacos 配置中获取数组或列表属性（通过逗号分隔）
    @Value("${demo.config.tags:default}")
    private String[] tags;

    // 访问计数器
    private final AtomicInteger counter = new AtomicInteger(0);

    /**
     * 获取配置信息
     * @return 配置信息Map
     */
    public Map<String, Object> getConfigInfo() {
        Map<String, Object> configInfo = new HashMap<>();
        configInfo.put("message", message);
        configInfo.put("timeout", timeout);
        configInfo.put("enabled", enabled);
        configInfo.put("tags", tags);
        configInfo.put("accessCount", counter.incrementAndGet());
        return configInfo;
    }

    /**
     * 获取消息配置
     * @return 消息配置
     */
    public String getMessage() {
        return message;
    }

    /**
     * 获取超时配置
     * @return 超时配置（秒）
     */
    public int getTimeout() {
        return timeout;
    }

    /**
     * 检查功能是否启用
     * @return 是否启用
     */
    public boolean isEnabled() {
        return enabled;
    }

    /**
     * 获取标签列表
     * @return 标签数组
     */
    public String[] getTags() {
        return tags;
    }
}